package com.huang.leetcode.str;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author：CreateSequence
 * @Date：2020-07-26 22:00
 * @Description：无重复字符的最长子串
 * 题解：https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-jie-suan-fa-3-wu-zhong-fu-zi-fu-de-zui-chang-z/
 */
public class PB3 {

    public int lengthOfLongestSubstring(String s) {
        int length = s.length();
        int max = 0;

        Map<Character, Integer> map = new HashMap<>();
        for (int start = 0, end = 0; end < length; end++) {
            char el = s.charAt(end);
            //判断end指针所在的字符是否曾经出现过
            if (map.containsKey(el)) {
                //如果出现过，就让start指向到该字符的下一个字符的位置
                //比较该位置与现start位置，避免absda走到最后一个a却取了第一个a的位置
                start = Math.max(map.get(el) + 1, start);
            }
            //更新字符串长度
            max = Math.max(max, end - start + 1);
            //记录当前end指向的字符位置
            map.put(el, end);
        }
        return max;
    }

}
